本章课程PDF,视频(油管B站)。

Why VAE?

一个直观的解释是auto-encoder的encoder和decoder都是非线性的,很难预测问号处是一张介于满月与弦月之间的图像。使用VAE的时候,把满月的图变成一个code时,会在code上面再加上noise,它会希望这个加上noise后,这个code reconstruct后,还是一张满月。等于说,原来auto-encoder是只希望一个点能被reconstruct回满月的图,但对VAE来说,会加上noise,希望在这个范围内的点reconstruct回来以后都应该仍然是满月的图。这个弦月的图也是一样的。此时,问号处既希望被reconstruct回满月的图又希望被reconstruct回弦月的图,可是只能reconstruct回一张图,所以,最后会产生一张介于满月与弦月之间的图。所以使用VAE去sample一个code,能够得到一个比较好的结果,而使用auto-encoder的时候,可能得到的都不像是一张真实的图。

encoder output的m代表原来的code。c代表加上noise的code。$\sigma$是这个noise的variance,代表了noise应该要有多大,因为variance是正的,所以会取一个exponential来确保它一定是正的。$e$是从一个正态分布sample出来的值。

machine在training的时候会自动去learn出来这个variance应该要有多大。

训练的时候,只最小化reconstruction error是不够的,因为variance是自己学的,单单这样去学,variance为0时候是最好的。所以需要黄色框框里的式子来确保variance不会太小。其中第一项为下图蓝色曲线、第二项为红色曲线、二者相减得绿色曲线,这样$\sigma$等于0时候,loss最小,此时variance为1,即variance不能太小,避免variance为0 ,第三项是L2正则化,希望参数稀疏避免过拟合。

从数学上解释,VAE是GMM的Distributed representation版本。
要最大化似然函数,似然函数可以拆成下界与$KL$距离。
下界与两个量有关:$P(x|z)$,$q(z|x)$,下界变大不一定使似然函数变大。要让$KL$最小,那么下界就是似然函数,得到$q(z|x)=p(z|x)$.
下界又可以拆成两项(一个负的$KL$距离+一个积分),与网络联系起来:最小化的那个式子就是要最小化这个$KL$距离,使得encoder产生的code $z$ 的分布与normal distribution $P(z)$越接近越好。

Problems of VAE

VAE只是模仿,没有创造。从来没有去真的学如何产生一张看起来像真的image。

图中realistic和fake都只是与target一个pixel的差距,在VAE中,这两张image是一样的好或不好。所以,VAE学的事情是怎么产生一张image跟data base里面的image一模一样,从来没有想过真的产生一张可以以假乱真的image。使用VAE来做训练的时候,产生的image往往都是data base里面的image的linear combination。

Generative Adversarial Network (GAN)

GAN有点像拟态的演化。


Discriminator判断image是Generator产生的还是real images, Generator根据Discriminator演化,想办法骗过Discriminator。 Generator从未看过real images, 产生的是database中没有见过的image。

Generator和Discriminator合起来就是一个大的network。调整Generator参数时候,需要fix住Discriminator参数。


下图中,黑点是real,绿线是Generator,蓝线是Discriminator。

In practical

To learn more

如果本博文对您有帮助,可以赞助支持一波博主~